import { Toast } from 'vant'
import store from '@/store/index.js'

var appParams = ''
var appClient = ''
var appClientName = ''
var versionCode = ''

const jsBridge = {
  init() {
    appParams = JSON.parse(localStorage.getItem('appParams'))
    if (!appParams) return false
    appClientName = appParams.deviceId
    versionCode = appParams.versionCode
    console.log('versionCode==', versionCode)
    if (appClientName === 'Android') {
      appClient = window.javaCode
    } else if (appClientName === 'IOS' && window.webkit) {
      appClient = window.webkit
    }
    return appClient
  },
  doInvokePromise(params) {
    return new Promise((res, rej) => {
      if (!this.validateParams()) {
        console.log('参数不匹配')
        rej('参数不匹配')
      }
      if (params.params) {
        window[params.apiName] && window[params.apiName](...params.params, res)
      } else {
        window[params.apiName] && window[params.apiName](res)
      }
    })
  },
  doInvoke(params) {
    console.log('params', params)
    if (window[params.apiName]) {
      if (params.params && params.params.length) {
        return window[params.apiName](...params.params)
      } else {
        return window[params.apiName]()
      }
    }
  },
  /**事件监听对象 */
  listeners: {
    onNativeBack: []
  },
  /**监听事件 */
  _on(eventName, func) {
    if (eventName && func) {
      if (this.listeners[eventName]) {
        this.listeners[eventName].push(func)
        console.log('注册了一个方法', this.listeners[eventName])
      } else {
        this.listeners[eventName] = [func]
        console.log('注册了一个方法', this.listeners[eventName])
      }
    }
  },
  /**移除事件 */
  _remove(eventName, func) {
    if (eventName && func) {
      if (this.listeners[eventName]) {
        const listeners = this.listeners[eventName]
        listeners.forEach((item, index) => {
          if (item === func) {
            listeners.splice(index, 1)
            console.log('删除了一个方法', this.listeners[eventName])
          }
        })
      } else {
        console.log('未找到相关监听事件', eventName)
      }
    }
  },

  /**
   * 监听事件
   */
  onNtiveEvent({ eventName, func }) {
    if (eventName && typeof func == 'function') {
      window[eventName] = func
    }
  },

  /**
   * 函数功能：获取截图测验的图片URL地址
   * 返回值：默认
   * @param {*} param0
   * int window.native_shoturl(function fnData(string sJson));
   */
  native_shoturl() {
    return this.doInvokePromise({
      apiName: 'native_shoturl'
    })
  },
  /**
   * 监听用户退出
   * @returns Promise
   */
  onUserLogout() {
    return new Promise((res) => {
      this.onNtiveEvent({
        eventName: '_OnUserLogout',
        func: res
      })
    })
  },
  // 关闭H5
  closePage() {
    console.log('关闭H5')
    if (!appClient) return false
    if (appClientName === 'Android') {
      appClient.closePage()
    } else {
      window.webkit.messageHandlers.luckyspin.postMessage({
        method: 'closePage',
        data: {}
      })
    }
  },
  // 更新金币
  updateCoin() {
    if (!appClient) return false
    if (appClientName === 'Android') {
      appClient.updateCoin()
    } else {
      window.webkit.messageHandlers.luckyspin.postMessage({
        method: 'updateCoin',
        data: {}
      })
    }
  },
  // 奖品购买
  prizeExchange(obj) {
    console.log('prizeExchange==', obj)
    // h5Payment: 0默认原生支付 1:paymax支付
    const { productId = '', bagId = '', type } = obj
    // 保存购买信息
    localStorage.setItem('buyProduct', JSON.stringify(obj))
    // int type 礼包类别 1、轮空 2、赠送 3、商品 4、订阅
    if (appClientName === 'Android') {
      appClient.prizeExchange(
        JSON.stringify({
          productId,
          bagId,
          type
        })
      )
    } else {
      // ios
      window.webkit.messageHandlers.luckyspin.postMessage({
        method: 'prizeExchange',
        data: {
          productId,
          bagId,
          type
        }
      })
    }
  },
  // 奖品购买
  prizeBuy(obj) {
    if (!appClient) return false
    // int type 礼包类别 1、轮空 2、赠送 3、商品 4、订阅
    if (appClientName === 'Android') {
      appClient.prizeExchange(JSON.stringify(obj))
    } else {
      window.webkit.messageHandlers.luckyspin.postMessage({
        method: 'prizeExchange',
        data: obj
      })
    }
  },
  // H5 去客户端金币页面
  goHomeCoins() {
    if (!appClient) return false
    if (appClientName === 'Android') {
      appClient.goHomeCoins()
      this.closePage()
    } else {
      window.webkit.messageHandlers.luckyspin.postMessage({
        method: 'goHomeCoins',
        data: {}
      })
    }
  },
  //  客户端调用H5方法，  奖品兑换成功
  exchangeSuccess() {
    // Toast('exchangeSuccess')
    console.log('exchangeSuccess')
    store.commit('changeBuyStatus', true)
  },
  //  客户端调用H5方法，  客户端按返回键时调用
  onBackPressed() {
    // this.closePage()
    store.commit('changeNativeBack', 1)
  },
  //  客户端调用H5方法，  客户端购买失败
  exchangeFailure() {
    console.log('buyFailure')
    // Toast('fail')
  }
}
// 延迟init
setTimeout(() => {
  jsBridge.init()
}, 1000)
window.jsBridge = jsBridge
export default jsBridge
